#
# Ronin Exploits - A Ruby library for Ronin that provides exploitation and
# payload crafting functionality.
#
# Copyright (c) 2007-2013 Hal Brodigan (postmodern.mod3 at gmail.com)
#
# This file is part of Ronin Exploits.
#
# Ronin is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ronin is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ronin.  If not, see <http://www.gnu.org/licenses/>
#

require 'ronin/database/migrations/exploits/exploit'
require 'ronin/model/types/description'

require 'dm-types/yaml'

module Ronin
  module Database
    module Migrations
      migration :create_exploits_targets_table,
                needs: :create_exploits_table do
        up do
          create_table :ronin_exploits_targets do
            column :id, Serial
            column :type, String, not_null: true
            column :description, Ronin::Model::Types::Description
            column :params, Yaml
            column :arch_id, Integer
            column :os_id, Integer
            column :software_id, Integer
            column :exploit_id, Integer, not_null: true

            # needed by Exploits::Targets::BufferOverflow
            column :buffer_length, Integer
            column :bp, Integer
            column :ip, Integer
            column :frame_repeat, Integer

            # needed by Exploits::Targets::FormatString
            column :overwrite, Integer
            column :address, Integer
            column :pop_length, Integer
          end
        end

        down do
          drop_table :ronin_exploits_targets
        end
      end
    end
  end
end
